M5Scratch for みんなのM5Stack自慢大会
M5S* for Scratch
https://gyazo.com/d8ec2ed78423488701dda4eb962741f4
自己紹介
むとうたけし(武藤武士) 50歳 主夫
M5Stackなどのガジェットで遊んだり、
https://gyazo.com/d92a9c39b457e47d559deca41176840b
はじめに
M5StickC/M5Stack Gray(M5S*)とScratch 1.4とのやり取りを実現
Scratchで、IMU(加速度、ジャイロ、地磁気)やボタンを使って遊びたいよね?
Scratchから、M5S*に命令したいよね?
M5StickC/M5Stack Grayってなぁに?
M5StickC/M5Stack Gray(M5S*)は、M5Stackの仲間
今回使った機能は、以下の通り
カラーディスプレイ
加速度+ジャイロ+(Grayのみ)地磁気を取れるIMU(6軸(M5StickC) or 9軸(Gray))
温度計
ボタンスイッチ
M5StickCだと、LED
Faces(Gray)だと、キーボードなど
https://gyazo.com/3bd3ff2eecf9f7f0292e13999b139bcf
M5StickC(左), M5Stack Gray(Faces;中央), M5StickV(右上), M5Stack Basic(右下)
Scratchってなぁに?
https://gyazo.com/b7a86c844cc5f87f51061fb0ea30a465
Scratch: ブロックベースのプログラミング環境
プログラミング教育で利用
ブロックベース: ブロックを積んでプログラミング
意外と変態的; オブジェクト指向, 並列処理, イベント(メッセージ)ベース
プログラムのシェア/フォーク(リミックス)のためのプラットフォームやSNS
Scratch 1.4では、Scratch Remote Sensor Protocolを使って、TCP/IP (ポート42001)経由でデータのやり取りが可能
テキストベースのプロトコル
メッセージのやり取り:broadcast "メッセージ"
変数のやり取り:sensor-update "変数" "値" ...
https://gyazo.com/dbe77008ce27cc6616058aed1e1e01be
M5Scratch
M5S* for Scratch
Arduino IDEで作った、M5S*とScratchとのやり取りを行うプログラム
Scratch側には、改造は不要
https://gyazo.com/9741ce6147d44b2fa6f1e90409a2cee1
M5S*からScratchへ
https://gyazo.com/d82ef86ac02c78b40359b55c56afc25b
Scratch側で、受け取るデータやイベントを実装
データやイベントを送る部分は、Arduino IDEで実装
IMU(加速度(ax,ay,az)+ジャイロ(gx,gy,gz)+(Grayのみ)地磁気(mx,my,mz))
IMUの値を使った、なんちゃって方位(heading)やpitch, roll, yawなど
温度センサー(temp)
ボタン(BtnA,BtnB,BtnC)、キーボード(Key_*)
ScratchからM5S*へ
https://gyazo.com/75ea275cdab77a95ffbb75530352d163
M5ScratchのArduino IDEで、受け取るデータやイベントを実装
データやイベントを送る部分は、Scratchで実装
色データ(r,g,b)
LED点滅(l)
文字列(s)
デモ
https://www.youtube.com/watch?v=q7X0UfZw_FE
https://www.youtube.com/watch?v=-cRbGXrUhyI
https://gyazo.com/51c5ad8fc62123a2be6a6a12e052b003
参考情報1:M5StickCとM5Stackで共通のソースを使う
ツール→ボードを選択すると、自動的にARDUINO_*マクロが定義されるので、#ifdefなどで場合わけ可能
table:board
ボード選択 自動的に定義されるマクロ
M5Stick-C ARDUINO_M5Stick_C
M5Stack-Core-ESP32 ARDUINO_M5Stack_Core_ESP32
M5Stack-FIRE ARDUINO_M5STACK_FIRE
ATOM Matrix:現状ではboards.txtには未定義
ツール→ボードの選択によって、以下が使えるはず(未検証)
table:ATOM Matrix
ボード選択 定義されるマクロ 備考
M5Stick-C ARDUINO_M5Stick_C M5StickCとの切り分けができない
ESP32 Pico Kit ARDUINO_ESP32_PICO Upload Speedを115200に変更
code:M5Scratch.ino
#if defined(ARDUINO_M5Stick_C) // M5StickCの場合 #elif defined(ARDUINO_M5Stack_Core_ESP32) // M5Stackの場合 画面周りのコードも、M5.Lcd.width()とM5.Lcd.height()を使って吸収可能
参考情報2:M5Stack Grayで地磁気センサーを使う
6軸IMUのMPU6886互換で利用する時は、M5StickCと同じM5.IMU.*インタフェース経由でIMUを利用可能
地磁気センサーを使う場合は、MPU9250を使って自力で頑張る
code:M5Scratch.ino
// 必要な.hファイルを読みこむ
MPU9250 IMU;
(snip)
// 初期化
IMU.MPU9250SelfTest(IMU.SelfTest);
IMU.calibrateMPU9250(IMU.gyroBias, IMU.accelBias);
IMU.initMPU9250();
IMU.initAK8963(IMU.magCalibration);
(snip)
// 地磁気データの読み込み
IMU.readMagData(IMU.magCount);
IMU.getMres();
mx = (float)IMU.magCount0 * IMU.mRes; my = (float)IMU.magCount1 * IMU.mRes; mz = (float)IMU.magCount2 * IMU.mRes; おわりに
M5S*とScratchを使って遊んでみました
今回、M5StickC用とM5Stack Gray用のソースを一本化できたので、更新が楽になりました
M5S*とScratchで遊ぶと、とっても楽しい!!
みなさんもいっしょに遊んでみませんか?
https://gyazo.com/d8ec2ed78423488701dda4eb962741f4
Q&A
質疑応答があれば
応募内容
【参加者/参加チーム名】むとうたけし (@610t)
【作品タイトル】M5Scratch (M5S* for Scratch)
【YouTubeリンク】
【インスタリンク】なし
【概要】
M5Stack Gray(Faces)、M5StickCとScratchの間で情報のやり取りをして、お互いに操作しあいます。
【アピールポイント】
M5StackとM5StickC(以下、M5S*)と以下のような情報のやり取りをします。
M5S* → Scratch
(9軸(M5Stack Gray) or 6軸(M5StickC))IMUデータと温度
ボタンやキーボード(M5Stack Faces)入力
Scratch → M5S*
変数r,g,bによるバックグラウンドカラーの変更
(M5StickC)変数lによるLEDの点灯/消灯
以前のバージョンから改善した点は、以下の通りです。
M5Stack用とM5StickC用のソースの一本化
地磁気センサーデータのやり取り
地磁気センサーを用いた簡易的なコンパス機能の実装
温度データのやり取り
pitch, roll, yawデータのやり取り
【ハッシュタグ】